package com.qwz.example;


import java.util.ArrayList;
import java.util.List;

/**
 * @Description: 组合对象，通常需要存储子对象，定义有子部件的部件行为并实现在component里面定义的与子部件有关的操作
 * @Package: com.qwz.learn.Composite
 * @Author: Qiuwuzhi
 * @CreateDate: 2019/12/20  下午 9:23
 * @Version V1.0
 */
public class Composite extends Component {
    /**
     * 组件对象的名称
     */

    private String name;

    public Composite(String name) {
        this.name = name;
    }

    /**
     * 用来存储对象中包含的子组件对象
     */
    private List<Component> childComponents = null;

    /**
     * 输出组合对象自身的结构
     */
    public void printStruct(String preStr) {
        //先输出自己
        System.out.println(preStr + "+" + this.name);
        //如果还包含子组件，那么就是输出这些子组件对象
        if (childComponents != null) {
            //添加一个空格，表示向后缩进一个空格
            preStr += " ";
            for (Component c : childComponents) {
                //递归地输出每个子对象
                c.printStruct(preStr);
            }
        }
    }

    @Override
    public void addChild(Component child) {
        if (childComponents == null) {
            childComponents = new ArrayList<Component>();
        }
        childComponents.add(child);
    }

}
